﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using System.Linq;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraGrid.Views.Grid;
namespace QuanLyKhachSan
{
    public partial class frmDatPhong : DevExpress.XtraEditors.XtraForm
    {
        DataClassesKhachSanDataContext db = new DataClassesKhachSanDataContext(SystemInfo .pub_ConnString);
        String khid = "";
        public frmQuanLyDatPhong frmquanlydatphong;
        public frmDatPhong()
        {
            InitializeComponent();
        }

        private void frmDatPhong_Load(object sender, EventArgs e)
        {

          
        }

        private void txtCMND_Leave(object sender, EventArgs e)
        {
            if (txtCMND.Text != "" && txtKhachHang.Text != "")
            {
                var testkhachhang = from kh in db.KHACH_HANGs where kh.KH_CMND == txtCMND.Text select kh;

                if (testkhachhang.Count() == 1)
                {
                    var khachhang = testkhachhang.Single();
                    if (txtKhachHang.Text.ToLower() != khachhang.KH_HOTEN.ToLower())
                    {
                        MessageBox.Show("CMND đã được tồn tại với tên: " + khachhang.KH_HOTEN);
                        txtDienThoai.Properties.ReadOnly = false;
                        txtDiaChi.Properties.ReadOnly = false;
                    }
                    else
                    {
                        txtDienThoai.Text = khachhang.KH_DIENTHOAI;
                        txtDienThoai.Properties.ReadOnly = true;
                        txtDiaChi.Text = khachhang.KH_DIACHI;
                        txtDiaChi.Properties.ReadOnly = true;
                        khid = khachhang.KH_ID.ToString();


                    }
                }
                else
                {
                    //MessageBox.Show("Thêm vào dữ liệu thôi");
                }
            }
        }

        private void gvChiTietDatPhong_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
        {
            if (e.Column.FieldName == "")
            {
                if (e.RowHandle >= 0)
                {
                    e.DisplayText = (e.RowHandle + 1).ToString();
                }
            } 
        }

        private void txtKhachHang_Leave(object sender, EventArgs e)
        {
            txtCMND_Leave(sender  , EventArgs .Empty );
        }
   

        //private void gridView1_CellValueChanged(object sender, CellValueChangedEventArgs e)
        //{
        //    if (e.Column == gridColumn2)
        //    {
        //        int indexGiaNgay = repositoryItemLookUpEditLoaiPhong.GetDataSourceRowIndex("LP_LOAI", e.Value);
        //        string cellvalueGiaNgay = repositoryItemLookUpEditLoaiPhong.GetDataSourceValue("DG_GIA_NGAY", indexGiaNgay).ToString();

        //        int indexGiaGio = repositoryItemLookUpEditLoaiPhong.GetDataSourceRowIndex("LP_LOAI", e.Value);
        //        string cellvalueGiaGio = repositoryItemLookUpEditLoaiPhong.GetDataSourceValue("DG_GIA_GIO", indexGiaGio).ToString();

        //        int indexCoPhong = repositoryItemLookUpEditLoaiPhong.GetDataSourceRowIndex("LP_LOAI", e.Value);
        //        string cellvalueCoPhong = repositoryItemLookUpEditLoaiPhong.GetDataSourceValue("CP_CO", indexCoPhong).ToString();

        //        gridView1.SetRowCellValue(e.RowHandle, gridView1.Columns["DG_GIA_NGAY"], cellvalueGiaNgay);
        //        gridView1.SetRowCellValue(e.RowHandle, gridView1.Columns["DG_GIA_GIO"], cellvalueGiaGio);
        //        gridView1.SetRowCellValue(e.RowHandle, gridView1.Columns["CP_CO"], cellvalueCoPhong);
        //    }
           
        //}

        //private void gridView1_ValidateRow(object sender, ValidateRowEventArgs e)
        //{
        //    ColumnView view = sender as ColumnView;
        //    GridColumn column1 = view.Columns["LP_LOAI"];
        //    //GridColumn column2 = view.Columns["CP_CO"];
        //    //GridColumn column3 = view.Columns["DG_GIA_NGAY"];
        //    //GridColumn column4 = view.Columns["DG_GIA_GIO"];
        //    GridColumn column5 = view.Columns ["CTDP_SLPHONG"];
        //    String loai = (String)view.GetRowCellValue(e.RowHandle, column1);
        //    //String co = (String)view.GetRowCellValue(e.RowHandle, column2);
        //    //Double ngay = (Double)view.GetRowCellValue(e.RowHandle, column3);
        //    //Double gio = (Double)view.GetRowCellValue(e.RowHandle, column4);
        //    Int32 sl = (Int32)view.GetRowCellValue(e.RowHandle, column5);
        //    int a = view.FocusedRowHandle;
        //    if (loai == null)
        //    {
        //            e.Valid = false;
        //            view.SetColumnError(column1, "Vui lòng chọn loại phòng.");      
        //    }
        //    if (sl == 0)
        //    {
        //        e.Valid = false;
        //        view.SetColumnError(column5, "Vui lòng nhập số lượng.");      
        //    }
            
        //}

        //private void gridView1_InvalidRowException(object sender, InvalidRowExceptionEventArgs e)
        //{
        //    e.ExceptionMode = ExceptionMode.NoAction;
           
        //}

       
        void fillPhong()
        {
            DataTable dt = new DataTable();
           
            dt.Columns.Add("CHECKBOX" ,System.Type.GetType("System.Boolean"));
            dt.Columns.Add("P_ID");
            dt.Columns.Add("P_MA");
            dt.Columns.Add("LP_LOAI");
            dt.Columns.Add("CP_CO");
            dt.Columns.Add("KV_TEN");
            dt.Columns.Add("DG_GIA_NGAY");
            dt.Columns.Add("DG_GIA_GIO");


            //var phong = (from p in db.PHONGs
            //             where p.LOAI_PHONG.LP_ID == int.Parse ( lookUpEditLoaiPhong.EditValue.ToString ())
            //             && p.CO_PHONG.CP_ID == int.Parse(lookUpEditLoaiPhong.EditValue.ToString())
            //             //&& p.CHI_TIET_DAT_PHONGs .
                         
            //            select new
            //            {
            //                p.P_ID,
            //                p.P_MA,
            //                p.LOAI_PHONG.LP_LOAI,
            //                p.CO_PHONG.CP_CO,
            //                p .KHU_VUC .KV_TEN
            //            }).ToList ();

            var phong = db.Kiem_tra_Dat_phong(DateTime .Parse (dateEditNgayBD .Text ),
               DateTime.Parse(dateEditNgayKT.Text)).ToList();

            for (int i = 0; i < phong.Count ; i++)
            {
                 dt.Rows.Add(new object[]
            {
                       false ,
                       phong[i].P_ID,
                       phong[i].P_MA,
                       phong[i].LP_LOAI,
                       phong[i].CP_CO,
                       phong[i].KV_TEN,
                       phong[i].DG_GIA_NGAY,
                       phong[i].DG_GIA_GIO
       
            });
                
            }
        
                 gridControlChiTietDatPhong.DataSource = dt;
           
           

        }
       

        private void gridView1_CustomColumnDisplayText(object sender, CustomColumnDisplayTextEventArgs e)
        {
          
        }

        private void btXoa_Click(object sender, EventArgs e)
        {
            gvPhong.DeleteSelectedRows();
        }

        private void btLuu_Click(object sender, EventArgs e)
        {
            if (txtKhachHang.Text == "" || txtCMND.Text == "" || dateEditNgayBD.Text == "" || dateEditNgayKT.Text == "" ||
              DateTime.Parse(dateEditNgayBD.Text) >= DateTime.Parse(dateEditNgayKT.Text) || gvPhong.RowCount <= 0)
            {
                if (txtKhachHang.Text == "")
                {
                    dxErrorKH.SetError(txtKhachHang, "Vui lòng nhập tên Khách Hàng.");
                }
                if (txtCMND.Text == "")
                {
                    dxErrorCMND.SetError(txtCMND, "Vui lòng nhập Số CMND.");
                }
                if (dateEditNgayBD.Text == "" || dateEditNgayKT.Text == "")
                {
                    if (dateEditNgayBD.Text == "")
                    {
                        dxErrorNgayDen.SetError(dateEditNgayBD, "Vui lòng nhập Ngày Đến.");
                    }
                    if (dateEditNgayKT.Text == "")
                    {
                        dxErrorNgayDi.SetError(dateEditNgayKT, "Vui lòng nhập Ngày Đi.");
                    }
                }
                else
                {
                    if (DateTime.Parse(dateEditNgayBD.Text) >= DateTime.Parse(dateEditNgayKT.Text))
                    {
                        dxErrorNgayDen.SetError(dateEditNgayBD, "Ngày đến không được lớn hơn ngày đi.");
                        dxErrorNgayDi.SetError(dateEditNgayKT, "Ngày đến không được lớn hơn ngày đi.");
                    }
                    else
                    {
                        dxErrorNgayDen.ClearErrors();
                        dxErrorNgayDi.ClearErrors();
                    }

                }

                if (gvPhong.RowCount <= 0)
                {
                    labelControl1.Visible = true;
                    labelControl1.Text = "Vui lòng nhập thông tin phòng cần đặt.";
                    timer1.Enabled = true;
                    timer1.Interval = 5000;
                }
            }
            else
            {
                try
                {
                   // DataClassesKhachSanDataContext db = new DataClassesKhachSanDataContext();
                    DAT_PHONG datphong = new DAT_PHONG();
                    datphong.NV_ID = SystemInfo.pub_NV_ID;
                    datphong.TTDP_TRANGTHAI = "Đang chờ";
                    if (khid == "")
                    {
                        KHACH_HANG khachhang = new KHACH_HANG();
                        khachhang.KH_HOTEN = txtKhachHang.Text;
                        khachhang.KH_CMND = txtCMND.Text;
                        khachhang.KH_DIACHI = txtDiaChi.Text;
                        khachhang.KH_DIENTHOAI = txtDienThoai.Text;

                        db.KHACH_HANGs.InsertOnSubmit(khachhang);
                        datphong .KHACH_HANG = khachhang;

                    }
                    else
                    {
                        datphong.KH_ID = int.Parse(khid);
                    }
                    datphong.DP_NGAYBD = DateTime.Parse(dateEditNgayBD.Text);
                    datphong.DP_NGAYKT = DateTime.Parse(dateEditNgayKT.Text);

                    for (int i = 0; i < gvPhong.RowCount; i++)
                    {
                        if (bool.Parse ( gvPhong.GetRowCellValue(i, "CHECKBOX").ToString()) == true)
                        {
                            CHI_TIET_DAT_PHONG chitiet = new CHI_TIET_DAT_PHONG();
                            chitiet.DAT_PHONG = datphong;
                            chitiet.P_ID = int.Parse(gvPhong.GetRowCellValue(i, "P_ID").ToString());
                            db.CHI_TIET_DAT_PHONGs.InsertOnSubmit(chitiet);

                            //cap nhat trang thai cua phong
                            var phong = db.PHONGs.Single(p => p.P_ID == chitiet.P_ID);
                            if (phong.TT_ID != 5)
                            {
                                 phong.TT_ID = 6;
                            }
                           

                        }
                       
                    }
                    
                    db.DAT_PHONGs.InsertOnSubmit(datphong);
                    db.SubmitChanges();
                    MessageBox.Show("Bạn đã đặt phòng thành công" );




                }
                catch (Exception)
                {
                    //throw;
                    MessageBox.Show("Bạn đã đặt phòng thất bại, vui lòng thử lại");
                }
               
            }
            
        }

        private void dateEditNgayBD_Enter(object sender, EventArgs e)
        {
            dxErrorNgayDen.ClearErrors();
        }

        private void dateEditNgayKT_Enter(object sender, EventArgs e)
        {
            dxErrorNgayDi.ClearErrors();
        }

        private void txtSL_EditValueChanging(object sender, ChangingEventArgs e)
        {
            dxErrorSL.ClearErrors();
        }

        private void txtKhachHang_Enter(object sender, EventArgs e)
        {
            dxErrorKH.ClearErrors();
        }

        private void txtCMND_Enter(object sender, EventArgs e)
        {
            dxErrorCMND.ClearErrors();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            labelControl1.Visible = false;
        }

        private void dateEditNgayBD_EditValueChanged(object sender, EventArgs e)
        {
            if (dateEditNgayBD.EditValue != null && dateEditNgayKT.EditValue != null)
            {
                this.fillPhong();
            }
        }

        private void dateEditNgayKT_EditValueChanged(object sender, EventArgs e)
        {
            if (dateEditNgayBD.EditValue != null && dateEditNgayKT.EditValue != null)
            {
                this.fillPhong();
            }
        }

        private void frmDatPhong_FormClosing(object sender, FormClosingEventArgs e)
        {

            frmquanlydatphong.fillQuanLyDatPhong();
        }     
    }
}